home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / shadow.s < prev    next >
Text File  |  1997-01-31  |  34KB  |  2,236 lines

  1.  
  2. * the 'Hello World' program in 68000 Assembler
  3. * the C version can be found in the Intuition manual
  4.  
  5. * this source code (C) HiSoft 1992 All Rights Reserved
  6.  
  7. * for Devpac Amiga Version 2 the following symbols were changed
  8. * to avoid clashes with the new include files:
  9. * Screen->MyScreen, NewScreen->MyNewScreen
  10. * Window->MyWindow, NewWindow->MyNewWindow
  11.  
  12.     opt    c+,d+
  13.  
  14.     include    workbench:utilities/devpac/system            use pre-assembled header
  15.     include    exec/exec_lib.i
  16.     include    intuition/intuition.i
  17.     include    intuition/intuition_lib.i
  18.     include    graphics/graphics_lib.i
  19.     include    graphics/text.i
  20.  
  21. INTUITION_REV    equ    31        v1.1
  22. GRAPHICS_REV    equ    31        v1.1
  23.  
  24. * Open the intuition library
  25.  
  26.     moveq    #100,d4            default error return code
  27.  
  28.     moveq    #INTUITION_REV,d0    version
  29.     lea    int_name(pc),a1
  30.     CALLEXEC OpenLibrary
  31.     tst.l    d0
  32.     beq    exit_false        if failed then quit
  33.     move.l    d0,_IntuitionBase    else save the pointer
  34.  
  35.     moveq    #GRAPHICS_REV,d0
  36.     lea    graf_name(pc),a1
  37.     CALLEXEC OpenLibrary
  38.     tst.l    d0
  39. ;    beq    exit_closeint        if failed then close Int, exit
  40.     move.l    d0,_GfxBase
  41.  
  42.     lea    MyNewScreen(pc),a0
  43.     CALLINT    OpenScreen        open a screen
  44.     tst.l    d0
  45. ;    beq    exit_closeall        if failed the close both, exit
  46.     move.l    d0,MyScreen
  47.  
  48.     move.l MyScreen,a0
  49.     lea sc_BitMap(a0),a0
  50.     lea bm_Planes(a0),a0
  51.     move.l #RAWSCRN,(a0)
  52.     move.l #RAWSCRN+10240,4(a0)
  53.     move.l #RAWSCRN+10240*2,8(a0)
  54.     move.l #RAWSCRN+10240*3,12(a0)
  55.     move.l #RAWSCRN+10240*4,16(a0)
  56.     move.l #RAWSCRN+10240*5,20(a0)
  57.     move.l #RAWSCRN+10240*6,24(a0)
  58.     move.l #RAWSCRN+10240*7,28(a0)
  59.  
  60. * now initialise a NewWindow structure. This is normally easier to
  61. * do with dc.w/dc.l statement etc, but for comparison with the C
  62. * version we do it like this
  63.     lea    MyNewWindow(pc),a0    good place to start
  64.     move.w    #20,nw_LeftEdge(a0)
  65.     move.w    #20,nw_TopEdge(a0)
  66.     move.w    #300,nw_Width(a0)
  67.     move.w    #100,nw_Height(a0)
  68.     move.b    #0,nw_DetailPen(a0)
  69.     move.b    #1,nw_BlockPen(a0)
  70.     move.l    #window_title,nw_Title(a0)
  71. _temp    set    WINDOWCLOSE!SMART_REFRESH!ACTIVATE!WINDOWSIZING
  72.     move.l    #_temp!WINDOWDRAG!WINDOWDEPTH,nw_Flags(a0)
  73.     move.l    #CLOSEWINDOW,nw_IDCMPFlags(a0)
  74.     move.w    #CUSTOMSCREEN,nw_Type(a0)
  75.     clr.l    nw_FirstGadget(a0)
  76.     clr.l    nw_CheckMark(a0)
  77.     move.l    MyScreen(pc),nw_Screen(a0)
  78.     clr.l    nw_BitMap(a0)
  79.     move.w    #100,nw_MinWidth(a0)
  80.     move.w    #25,nw_MinHeight(a0)
  81.     move.w    #640,nw_MaxWidth(a0)
  82.     move.w    #200,nw_MaxHeight(a0)
  83.  
  84. * thats it set up, now open the window (a0=NewWindow already)
  85. ;    CALLINT    OpenWindow
  86. ;    tst.l    d0
  87. ;    beq    exit_closescr            if failed
  88. ;    move.l    d0,MyWindow            save it
  89. ;
  90. ;    move.l    d0,a1                window
  91. ;    move.l    wd_RPort(a1),a1            rastport
  92. ;    moveq    #20,d0                X
  93. ;    moveq    #20,d1                Y
  94. ;    CALLGRAF Move                move the cursor
  95. ;
  96. ;    move.l    MyWindow(pc),a0
  97. ;    move.l    wd_RPort(a0),a1            rastport
  98. ;    lea    hello_message(pc),a0
  99. ;    moveq    #11,d0
  100. ;    CALLGRAF Text                print something
  101. ;
  102. ;    move.l    MyWindow(pc),a0
  103. ;    move.l    wd_UserPort(a0),a0
  104. ;    move.b    MP_SIGBIT(a0),d1        (misprint in manual)
  105. ;    moveq    #0,d0
  106. ;    bset    d1,d0                do a shift
  107. ;    CALLEXEC Wait
  108.  
  109. ;    moveq    #0,d4                return code
  110.  
  111. * various exit routines that do tidying up, given a return code in d4
  112.  
  113. ;    move.l    MyWindow(pc),a0
  114. ;    CALLINT CloseWindow
  115.  
  116. ;exit_closescr
  117. ;    move.l    MyScreen(pc),a0
  118. ;    CALLINT CloseScreen
  119.  
  120. ;exit_closeall
  121. ;    move.l    _GfxBase(pc),a1
  122. ;    CALLEXEC CloseLibrary
  123.  
  124. ;exit_closeint
  125. ;    move.l    _IntuitionBase(pc),a1
  126. ;    CALLEXEC CloseLibrary
  127.  
  128. ;done:
  129. ;    bra done
  130.  
  131.  move.l #PALETTEBIT,a0
  132.  move.l #COPIEDPAL+4,a1
  133.  move.w #255,d0
  134.  
  135. copydown:
  136.  move.b 1(a0),(a1)
  137.  move.b 3(a0),4(a1)
  138.  move.b 5(a0),8(a1)
  139.  add.w #6,a0
  140.  add.w #12,a1
  141.  dbra d0,copydown
  142.  
  143.  move.w #256,COPIEDPAL
  144.  move.w #0,COPIEDPAL+2
  145. LOOKFORME:
  146.  move.l MyScreen,a0
  147.  lea sc_ViewPort(a0),a0
  148.  move.l #COPIEDPAL,a1
  149.  move.l _GfxBase,a6
  150.  jsr -$372(a6)
  151.  
  152.  move.l MyScreen,a4
  153.  move.w sc_MouseX(a4),d0
  154.  move.w sc_MouseY(a4),d1
  155.  move.w d0,OLDXM
  156.  move.w d1,OLDYM
  157.     
  158. loop:
  159.  
  160.  move.l MyScreen,a4
  161.  move.w sc_MouseX(a4),d0
  162.  move.w sc_MouseY(a4),d1
  163.  
  164.  sub.w OLDXM,d0
  165.  sub.w OLDYM,d1
  166.  add.w d0,OLDXM
  167.  add.w d1,OLDYM
  168.  
  169. ; btst #6,$bfe001
  170. ; beq.s .SHIFTABOUT
  171.  
  172.  
  173.  
  174.  muls #8190,d0
  175.  divs #160,d0
  176.  add.w d0,YANG
  177.  and.w #8190,YANG
  178.  muls #8190,d1
  179.  divs #160,d1
  180.  and.w #8190,d1
  181.  add.w d1,XANG
  182.  and.w #8190,XANG
  183.  
  184.  add.w #40,AANG
  185.  add.w #70,BANG
  186.  and.w #8191,AANG
  187.  and.w #8191,BANG
  188.  
  189.  add.w #60,CANG
  190.  add.w #90,DANG
  191.  and.w #8191,CANG
  192.  and.w #8191,DANG
  193.  
  194.  
  195.  bra .ROTABOUT
  196. .SHIFTABOUT
  197.  
  198.  add.w d0,XOFF
  199.  add.w d1,ZOFF
  200.  
  201.  
  202. .ROTABOUT
  203.  
  204. ************************************************
  205. ************************************************
  206. ************************************************
  207. ************************************************
  208. ************************************************
  209. ************************************************
  210. ************************************************
  211. ************************************************
  212. ************************************************
  213. ************************************************
  214. ************************************************
  215. ************************************************
  216. ************************************************
  217. ************************************************
  218.  
  219. *SHADOW BUFFER CALCULATION
  220.  
  221.  move.w #254,HIGHPOLY
  222.  
  223.  move.l #POLYGONDATA,a0
  224.  move.w (a0)+,d7    ; number of polys
  225. POLYGONLOOPSHAD:
  226.  move.l d7,-(a7)
  227.  
  228.  move.w (a0)+,TEXTUREADD
  229.  move.w (a0)+,d6
  230.  move.w (a0)+,TRANSTEXT
  231.  
  232.  move.l #ROTATEDPTS,a2
  233.  move.l #UVCOORDS,a3
  234.  
  235.  move.w AANG,d1
  236.  move.w BANG,d3
  237.  cmp.w #2,d6
  238.  bne.s .notsecrot
  239.  move.w CANG,d1
  240.  move.w DANG,d3
  241. .notsecrot
  242.  move.l #SINETABLE,a1
  243.  move.w (a1,d1.w),XSIN    ;xsin
  244.  move.w (a1,d3.w),YSIN    ;ysin
  245.  
  246.  add.w #2048,a1
  247.  move.w (a1,d1.w),XCOS    ;xcos
  248.  move.w (a1,d3.w),YCOS    ;ycos
  249.  
  250.  moveq #3,d7
  251.  tst.w d6
  252.  beq NOROTATESHAD
  253.  
  254. ROTPTLOPSHAD:
  255.  
  256.  move.w (a0)+,d0
  257.  move.w d0,d3
  258.  move.w (a0)+,d1
  259.  move.w (a0)+,d2
  260.  move.w d2,d5
  261.  
  262.  muls YCOS,d0
  263.  muls YSIN,d2
  264.  sub.l d2,d0
  265.  asr.l #6,d0    ; new x*512
  266.  
  267.  muls YSIN,d3
  268.  muls YCOS,d5
  269.  add.l d5,d3
  270.  add.l d3,d3
  271.  swap d3
  272.  move.w d3,d2    ; new z
  273.  
  274.  move.w d1,d4
  275.  move.w d2,d5
  276.  muls XCOS,d1
  277.  muls XSIN,d2
  278.  sub.l d2,d1
  279.  asr.l #6,d1    ; new y*512
  280.  
  281.  muls XSIN,d4
  282.  muls XCOS,d5
  283.  add.l d5,d4
  284.  add.l d4,d4
  285.  swap d4
  286.  move.w d4,d2    ; new z
  287.  
  288.  ext.l d2
  289.  
  290.  move.w XOFF,d5
  291.  ext.l d5
  292.  asl.l #8,d5
  293.  add.l d5,d5
  294.  add.l d5,d0
  295.  
  296.  move.l d0,(a2)+
  297.  move.l d1,(a2)+
  298.  move.l d2,(a2)+
  299.  addq #4,a2
  300.  
  301.  move.l (a0)+,(a3)+
  302.  
  303.  dbra d7,ROTPTLOPSHAD
  304.  
  305.  bra ROTATEDSHAD
  306.  
  307. NOROTATESHAD:
  308.  move.w (a0)+,d0
  309.  move.w (a0)+,d1
  310.  move.w (a0)+,d2
  311.  
  312.  ext.l d0
  313.  ext.l d1
  314.  ext.l d2
  315.  asl.l #8,d0
  316.  asl.l #8,d1
  317.  asl.l #1,d0
  318.  asl.l #1,d1
  319.  move.l d0,(a2)+
  320.  move.l d1,(a2)+
  321.  move.l d2,(a2)+
  322.  addq #4,a2
  323.  move.l (a0)+,(a3)+
  324.  
  325.  dbra d7,NOROTATESHAD
  326.  
  327. ROTATEDSHAD:
  328.  
  329.  
  330.  move.l a0,-(a7)
  331.  
  332.  moveq #3,d7
  333.  move.l #ROTATEDPTS,a0
  334.  
  335.  move.l #20000,d3    ;top
  336.  move.l #-20000,d4    ;bottom
  337.  
  338.  move.l #-5000,d5
  339.  
  340. FINDTB:
  341.  
  342.  move.l 8(a0),d0
  343.  asr.l #2,d0
  344.  cmp.l d0,d3
  345.  ble.s .oktop
  346.  move.l d0,d3
  347. .oktop:
  348.  cmp.l d0,d4
  349.  bge.s .okbot
  350.  move.l d0,d4
  351. .okbot:
  352.  
  353.  move.l 4(a0),d0
  354.  asr.l #8,d0
  355.  asr.l #3,d0
  356.  cmp.l d0,d5
  357.  bgt.s .okhigh
  358.  move.l d0,d5
  359. .okhigh:
  360.  
  361.  adda.w #16,a0
  362.  
  363.  dbra d7,FINDTB
  364.  
  365. ; add.w #128,d5
  366. ; move.w d5,HIGHPOLY
  367.  
  368.  add.w #128,d3
  369.  add.w #128,d4
  370.  move.w d3,TOPLINE
  371.  move.w d4,BOTLINE
  372.  
  373.  move.w #0,d0
  374.  move.w #1,d1
  375.  bsr SIMPLESHADLINE
  376.  move.w #1,d0
  377.  move.w #2,d1
  378.  bsr SIMPLESHADLINE
  379.  move.w #2,d0
  380.  move.w #3,d1
  381.  bsr SIMPLESHADLINE
  382.  move.w #3,d0
  383.  move.w #0,d1
  384.  bsr SIMPLESHADLINE
  385.  
  386. ***********************************************
  387. * Draw the shadow polygon
  388.  
  389.  move.l #SHADOWBUFFER,a2
  390.  move.l #LEFTUVS,a0
  391.  move.w TOPLINE,d0
  392.  move.w BOTLINE,d1
  393.  sub.w d0,d1
  394.  asl.w #3,d0
  395.  add.w d0,a0
  396.  muls #(256/8),d0
  397.  add.l d0,a2    ; pointer to screen line.
  398.  
  399.  subq #1,d1
  400.  blt NOPOLYGONSHAD
  401.  
  402. DOAHORLINESHAD:
  403.  swap d1
  404.  
  405.  move.w RIGHTUVS-LEFTUVS(a0),d0
  406.  move.w (a0)+,d7
  407.  sub.w d7,d0
  408.  blt NOPOLYGONSHAD
  409.  
  410.  move.l a2,-(a7)
  411.  
  412. ; asr.w #2,d0
  413. ; asr.w #2,d7
  414.  add.w d7,a2
  415.  ext.l d0
  416.  addq #1,d0
  417.  
  418.  
  419.  
  420.  
  421.  
  422.  
  423.  
  424.  
  425.  
  426.  
  427.  
  428.  
  429.  
  430.  
  431.  
  432.  move.w RIGHTUVS-LEFTUVS(a0),d7
  433.  move.w (a0)+,d4
  434.  swap d7
  435.  clr.w d7
  436.  swap d4
  437.  clr.w d4
  438.  sub.l d4,d7
  439.  divs.l d0,d7
  440.  move.l d7,a5
  441.  
  442.  move.w RIGHTUVS-LEFTUVS(a0),d7
  443.  swap d7
  444.  clr.w d7
  445.  move.w (a0)+,d5
  446.  swap d5
  447.  clr.w d5
  448.  sub.l d5,d7
  449.  divs.l d0,d7
  450.  move.l d7,a6
  451.  
  452.  move.w RIGHTUVS-LEFTUVS(a0),d7
  453.  swap d7
  454.  clr.w d7
  455.  move.w (a0)+,d6
  456.  swap d6
  457.  clr.w d6
  458.  sub.l d6,d7
  459.  divs.l d0,d7
  460.  move.l d7,a3
  461.  
  462.  move.l a0,-(a7)
  463.  move.l d1,-(a7)
  464.  move.l #TEXTURES,a0
  465.  move.w TEXTUREADD,d7
  466.  bge.s .okaddtes
  467.  and.w #$7fff,d7
  468.  add.l #65536,a0
  469. .okaddtes:
  470.  add.w d7,a0
  471.  move.w #0,d7
  472.  
  473.  subq #1,d0
  474.  
  475. ; d0=xdist
  476. ; d4=U  a5=DU
  477. ; d5=V  a6=DV
  478. ; d6=Y  a3=DY
  479.  moveq #0,d1
  480.  
  481. PLOTADOT:
  482.  
  483. .across
  484.  
  485.  swap d4
  486.  swap d5
  487.  move.w d4,d2
  488.  lsl.w #8,d2
  489.  swap d4
  490.  move.b d5,d2
  491.  add.l a5,d4
  492.  swap d5
  493.  add.l a6,d5
  494.  
  495.  
  496.  swap d6
  497.  move.b (a2)+,d1
  498.  tst.b (a0,d2.w*4)
  499.  beq.s .noplt
  500.  cmp.w d1,d6
  501.  bgt.s .noplt
  502.  move.b d6,-1(a2)
  503. .noplt:
  504.  swap d6
  505. .noplty
  506.  add.l a3,d6
  507.  
  508.  dbra d0,.across
  509.  
  510.  move.l (a7)+,d1
  511.  move.l (a7)+,a0
  512.  move.l (a7)+,a2
  513.  
  514. .noline:
  515.  add.w #256,a2
  516.  
  517.  swap d1
  518.  dbra d1,DOAHORLINESHAD
  519.  
  520. NOPOLYGONSHAD:
  521.  
  522. ***********************************************
  523.  move.l (a7)+,a0
  524.  move.l (a7)+,d7
  525.  
  526.  sub.w #1,HIGHPOLY
  527.  dbra d7,POLYGONLOOPSHAD
  528.  
  529.  
  530.  
  531.  
  532. ************************************************
  533. ************************************************
  534. ************************************************
  535. ************************************************
  536. ************************************************
  537. ************************************************
  538. ************************************************
  539. ************************************************
  540. ************************************************
  541. ************************************************
  542. ************************************************
  543. ************************************************
  544. ************************************************
  545. ************************************************
  546. ************************************************
  547. ************************************************
  548. ************************************************
  549.  
  550.  move.w #254,HIGHPOLY
  551.  
  552.  move.l #POLYGONDATA,a0
  553.  move.w (a0)+,d7    ; number of polys
  554. POLYGONLOOP:
  555.  move.l d7,-(a7)
  556.  
  557.  move.w (a0)+,TEXTUREADD
  558.  move.w (a0)+,d6
  559.  move.w d6,SPINAROUND
  560.  move.w (a0)+,TRANSTEXT
  561.  move.l #ROTATEDPTS,a2
  562.  move.l #UVCOORDS,a3
  563.  
  564.  
  565.  
  566.  move.w AANG,d1
  567.  move.w BANG,d3
  568.  cmp.w #2,d6
  569.  bne.s .notsecrot
  570.  move.w CANG,d1
  571.  move.w DANG,d3
  572. .notsecrot
  573.  move.l #SINETABLE,a1
  574.  move.w (a1,d1.w),XSIN    ;xsin
  575.  move.w (a1,d3.w),YSIN    ;ysin
  576.  
  577.  add.w #2048,a1
  578.  move.w (a1,d1.w),XCOS    ;xcos
  579.  move.w (a1,d3.w),YCOS    ;ycos
  580.  
  581.  moveq #3,d7
  582.  move.w d6,d0
  583.  move.l #-5000,d6
  584.  tst.w d0
  585.  beq NOROTATE
  586.  
  587.  
  588. ROTPTLOP:
  589.  
  590.  move.w (a0)+,d0
  591.  move.w d0,d3
  592.  move.w (a0)+,d1
  593.  move.w (a0)+,d2
  594.  move.w d2,d5
  595.  
  596.  muls YCOS,d0
  597.  muls YSIN,d2
  598.  sub.l d2,d0
  599.  asr.l #6,d0    ; new x*512
  600.  
  601.  muls YSIN,d3
  602.  muls YCOS,d5
  603.  add.l d5,d3
  604.  add.l d3,d3
  605.  swap d3
  606.  move.w d3,d2    ; new z
  607.  
  608.  move.w d1,d4
  609.  move.w d2,d5
  610.  muls XCOS,d1
  611.  muls XSIN,d2
  612.  sub.l d2,d1
  613.  asr.l #6,d1    ; new y*512
  614.  
  615.  muls XSIN,d4
  616.  muls XCOS,d5
  617.  add.l d5,d4
  618.  add.l d4,d4
  619.  swap d4
  620.  move.w d4,d2    ; new z
  621.  
  622.  
  623.  ext.l d2
  624.  
  625.  move.w XOFF,d5
  626.  ext.l d5
  627.  asl.l #8,d5
  628.  add.l d5,d5
  629.  add.l d5,d0
  630.  
  631.  move.l d0,(a2)+
  632.  move.l d1,(a2)+
  633.  move.l d2,(a2)+
  634.  addq #4,a2
  635.  
  636.  move.l d1,d5
  637.  asr.l #8,d5
  638.  asr.l #3,d5
  639.  cmp.w d5,d6
  640.  bgt.s .okhigh
  641.  move.w d5,d6
  642. .okhigh:
  643.  
  644.  
  645.  move.l (a0)+,(a3)+
  646.  
  647.  dbra d7,ROTPTLOP
  648.  
  649.  bra ROTATED
  650.  
  651. NOROTATE:
  652.  move.w (a0)+,d0
  653.  move.w (a0)+,d1
  654.  move.w (a0)+,d2
  655.  
  656.  ext.l d0
  657.  ext.l d1
  658.  ext.l d2
  659.  asl.l #8,d0
  660.  asl.l #8,d1
  661.  asl.l #1,d0
  662.  asl.l #1,d1
  663.  move.l d0,(a2)+
  664.  move.l d1,(a2)+
  665.  move.l d2,(a2)+
  666.  addq #4,a2
  667.  move.l (a0)+,(a3)+
  668.  
  669.  move.l d1,d5
  670.  asr.l #8,d5
  671.  asr.l #3,d5
  672.  cmp.w d5,d6
  673.  bgt.s .okhigh
  674.  move.w d5,d6
  675. .okhigh:
  676.  
  677.  dbra d7,NOROTATE
  678.  
  679. ROTATED:
  680.  
  681. ; add.w #128,d6
  682. ; move.w d6,HIGHPOLY
  683.  
  684.  move.l a0,-(a7)
  685.  
  686.  sub.l #10*4,a0
  687.  
  688.  move.w XANG,d1
  689.  move.w YANG,d3
  690.  move.l #SINETABLE,a1
  691.  move.w (a1,d1.w),XSIN2    ;xsin
  692.  move.w (a1,d3.w),YSIN2    ;ysin
  693.  
  694.  add.w #2048,a1
  695.  move.w (a1,d1.w),XCOS2    ;xcos
  696.  move.w (a1,d3.w),YCOS2    ;ycos
  697.  
  698.  
  699.  
  700.  moveq #3,d7
  701. ; move.l #ROTATEDPTS,a0
  702.  move.l #ONSCREENPTS,a1
  703.  move.l FASTBUFFER,a2
  704.  
  705.  move.w #20000,d3    ;top
  706.  move.w #-20000,d4    ;bottom
  707.  move.w #-5000,d5
  708.  
  709. CONVTOSCREEN:
  710.  
  711.  movem.l d3-d5,-(a7)
  712.  
  713.  move.w (a0)+,d0
  714.  move.w d0,d3
  715.  move.w (a0)+,d1
  716.  move.w (a0)+,d2
  717.  addq #4,a0
  718.  move.w d2,d5
  719.  
  720.  tst.w SPINAROUND
  721.  beq.s .NOSPIN
  722.  
  723.  muls YCOS,d0
  724.  muls YSIN,d2
  725.  sub.l d2,d0
  726.  add.l d0,d0
  727.  swap d0
  728. ; asr.l #6,d0    ; new x*512
  729.  
  730.  
  731.  muls YSIN,d3
  732.  muls YCOS,d5
  733.  add.l d5,d3
  734.  add.l d3,d3
  735.  swap d3
  736.  move.w d3,d2    ; new z
  737.  
  738.  move.w d1,d4
  739.  move.w d2,d5
  740.  muls XCOS,d1
  741.  muls XSIN,d2
  742.  sub.l d2,d1
  743.  add.l d1,d1
  744.  swap d1
  745.  
  746.  muls XSIN,d4
  747.  muls XCOS,d5
  748.  add.l d5,d4
  749.  add.l d4,d4
  750.  swap d4
  751.  move.w d4,d2    ; new z
  752.  
  753.  move.w d0,d3
  754.  move.w d2,d5
  755.  
  756. .NOSPIN
  757.  
  758.  muls YCOS2,d0
  759.  muls YSIN2,d2
  760.  sub.l d2,d0
  761.  asr.l #6,d0    ; new x*512
  762.  
  763.  muls YSIN2,d3
  764.  muls YCOS2,d5
  765.  add.l d5,d3
  766.  add.l d3,d3
  767.  swap d3
  768.  move.w d3,d2    ; new z
  769.  
  770.  move.w d1,d4
  771.  move.w d2,d5
  772.  muls XCOS2,d1
  773.  muls XSIN2,d2
  774.  sub.l d2,d1
  775.  asr.l #6,d1    ; new y*512
  776.  
  777.  muls XSIN2,d4
  778.  muls XCOS2,d5
  779.  add.l d5,d4
  780.  add.l d4,d4
  781.  swap d4
  782.  move.w d4,d2    ; new z
  783.  
  784. ; 3 7 15 21 35 45
  785.  
  786.  ext.l d2
  787.  movem.l (a7)+,d3-d5
  788.  
  789. ; move.l (a0)+,d0
  790. ; move.l (a0)+,d1
  791. ; move.l (a0)+,d2
  792.  
  793. ; move.l d1,d6
  794. ; asr.l #8,d6
  795. ; asr.l #3,d6
  796. ; cmp.w d6,d5
  797. ; bgt.s .okhigh
  798. ; move.w d6,d5
  799. ;.okhigh:
  800.  
  801.  add.w ZOFF,d2
  802.  ext.l d2
  803. ; addq #4,a0  
  804.  
  805.  add.l d0,d0
  806.  add.l d1,d1
  807.  
  808.  divs d2,d0
  809.  divs d2,d1
  810.  add.w #160*4,d0
  811.  add.w #128*4,d1
  812.  move.w d0,(a1)+
  813.  move.w d1,(a1)+
  814.  
  815.  asr.w #2,d1
  816.  
  817.  cmp.w d1,d3
  818.  ble.s .oktop
  819.  move.w d1,d3
  820. .oktop
  821.  
  822.  cmp.w d1,d4
  823.  bge.s .okbot
  824.  move.w d1,d4
  825. .okbot:
  826.  
  827. ; ext.l d0
  828. ; ext.l d1
  829. ; asr.l #2,d0
  830. ; and.b #%11111100,d1
  831. ; asl.l #4,d1
  832. ; move.l d1,d2
  833. ; asl.l #2,d1
  834. ; add.l d2,d1
  835. ; add.l d1,d0
  836. ;
  837. ; move.b #255,(a2,d0.l)
  838.  
  839.  dbra d7,CONVTOSCREEN
  840.  
  841.  
  842.  move.w d3,TOPLINE
  843.  move.w d4,BOTLINE
  844.  
  845.  move.l #ONSCREENPTS,a1
  846.  move.w (a1),d0    ;x1
  847.  sub.w 4(a1),d0
  848.  move.w 8(a1),d2
  849.  sub.w 4(a1),d2
  850.  
  851.  
  852.  move.w 2(a1),d1    ;x1
  853.  sub.w 6(a1),d1
  854.  move.w 10(a1),d3
  855.  sub.w 6(a1),d3
  856.  
  857.  muls d2,d1
  858.  muls d0,d3
  859.  sub.l d3,d1
  860.  ble NOPOLYGON
  861.  
  862.  move.l #ROTATEDPTS,a1
  863.  move.l (a1),d3
  864.  sub.l 16(a1),d3
  865.  asr.l #8,d3
  866.  asr.l #1,d3
  867.  move.l 4(a1),d4
  868.  sub.l 16+4(a1),d4
  869.  asr.l #8,d4
  870.  asr.l #1,d4
  871.  move.l 8(a1),d5
  872.  sub.l 16+8(a1),d5
  873.  
  874.  move.w d3,d6
  875.  muls d6,d6
  876.  move.w d4,d7
  877.  muls d7,d7
  878.  add.l d7,d6
  879.  move.w d5,d7
  880.  muls d7,d7
  881.  add.l d7,d6
  882.  move.l d6,d2
  883.  bsr CALCSQROOT
  884.  move.w d2,LEN1
  885.  
  886.  move.l 32(a1),d0
  887.  sub.l 16(a1),d0
  888.  asr.l #8,d0
  889.  asr.l #1,d0
  890.  move.l 32+4(a1),d1
  891.  sub.l 16+4(a1),d1
  892.  asr.l #8,d1
  893.  asr.l #1,d1
  894.  move.l 32+8(a1),d2
  895.  sub.l 16+8(a1),d2
  896.  
  897.  muls d2,d3
  898.  muls d0,d5
  899.  sub.l d3,d5    ; length
  900.  muls.l #25,d5
  901.  
  902.  muls d0,d0
  903.  muls d1,d1
  904.  muls d2,d2
  905.  add.l d0,d1
  906.  add.l d1,d2
  907.  bsr CALCSQROOT
  908.  
  909.  muls LEN1,d2
  910.  divs.l d2,d5
  911.  
  912.  tst.l d5
  913.  ble.s .okbr
  914.  moveq #0,d5
  915. .okbr:
  916.  add.w #25,d5
  917.  
  918.  asl.w #8,d5
  919.  move.w d5,BRIGHTNESS
  920.  
  921.  move.w #0,d0
  922.  move.w #1,d1
  923.  bsr SIMPLECALCLINE
  924.  move.w #1,d0
  925.  move.w #2,d1
  926.  bsr SIMPLECALCLINE
  927.  move.w #2,d0
  928.  move.w #3,d1
  929.  bsr SIMPLECALCLINE
  930.  move.w #3,d0
  931.  move.w #0,d1
  932.  bsr SIMPLECALCLINE
  933.  
  934.  
  935.  
  936. ***********************************************
  937. * Draw the polygon (shadowed).
  938.  
  939.  move.l FASTBUFFER,a2
  940.  move.l #LEFTUVS,a0
  941.  move.w TOPLINE,d0
  942.  move.w BOTLINE,d1
  943.  sub.w d0,d1
  944.  asl.w #4,d0
  945.  add.w d0,a0
  946.  muls #(320/16),d0
  947.  add.l d0,a2    ; pointer to screen line.
  948.  
  949.  subq #1,d1
  950.  blt NOPOLYGON
  951.  
  952. DOAHORLINE:
  953.  swap d1
  954.  
  955.  move.w RIGHTUVS-LEFTUVS(a0),d0
  956.  move.w (a0)+,d7
  957.  sub.w d7,d0
  958.  bge.s .okflibble
  959.  
  960.  add.w #14,a0
  961.  add.w #320,a2
  962.  swap d1
  963.  dbra d1,DOAHORLINE
  964.  bra NOPOLYGON
  965.  
  966. .okflibble:
  967.  
  968.  move.l a2,-(a7)
  969.  
  970.  asr.w #2,d0
  971.  asr.w #2,d7
  972.  add.w d7,a2
  973.  ext.l d0
  974.  addq #1,d0
  975.  
  976.  move.l RIGHTUVS-LEFTUVS(a0),d7
  977.  move.l (a0)+,d2 
  978.  sub.l d2,d7
  979.  divs.l d0,d7
  980.  move.l d7,a1
  981.  
  982.  move.l RIGHTUVS-LEFTUVS(a0),d7 
  983.  move.l (a0)+,d3 
  984.  sub.l d3,d7
  985.  divs.l d0,d7
  986.  move.l d7,a4
  987.  
  988.  move.w RIGHTUVS-LEFTUVS(a0),d7
  989.  move.w (a0)+,d4
  990.  swap d7
  991.  clr.w d7
  992.  swap d4
  993.  clr.w d4
  994.  sub.l d4,d7
  995.  divs.l d0,d7
  996.  move.l d7,a5
  997.  
  998.  move.w RIGHTUVS-LEFTUVS(a0),d7
  999.  swap d7
  1000.  clr.w d7
  1001.  move.w (a0)+,d5
  1002.  swap d5
  1003.  clr.w d5
  1004.  sub.l d5,d7
  1005.  divs.l d0,d7
  1006.  move.l d7,a6
  1007.  
  1008.  move.w RIGHTUVS-LEFTUVS(a0),d7
  1009.  swap d7
  1010.  clr.w d7
  1011.  move.w (a0)+,d6
  1012.  swap d6
  1013.  clr.w d6
  1014.  sub.l d6,d7
  1015.  divs.l d0,d7
  1016.  move.l d7,a3
  1017.  
  1018.  move.l a0,-(a7)
  1019.  move.l d1,-(a7)
  1020.  move.l #TEXTURES,a0
  1021.  move.w TEXTUREADD,d7
  1022.  bge.s .okaddtes
  1023.  and.w #$7fff,d7
  1024.  add.l #65536,a0
  1025. .okaddtes:
  1026.  add.w d7,a0
  1027.  move.w #0,d7
  1028.  
  1029.  move.w BRIGHTNESS,a6
  1030.  
  1031.  move.l a7,SAVESTACK
  1032.  move.l #SHADOWBUFFER,a7
  1033.  
  1034.  subq #1,d0
  1035.  
  1036. ; d0=xdist
  1037. ; d2=U    a1=DU
  1038. ; d3=V  a4=DV
  1039. ; d4=X  a5=DX
  1040. ; d5=Y  a6=DY
  1041. ; d6=Z  a3=DZ
  1042.  move.w HIGHPOLY,d5
  1043.  
  1044. .across
  1045.  
  1046.  moveq #0,d1
  1047.  swap d6
  1048.  move.w d6,d1
  1049.  lsl.w #8,d1
  1050.  swap d4
  1051.  move.b d4,d1
  1052.  swap d4
  1053.  swap d6
  1054.  add.l a5,d4
  1055.  add.l a3,d6
  1056.  
  1057.  moveq #0,d7
  1058. ; swap d5
  1059.  move.b (a7,d1.l),d7
  1060.  cmp.w d7,d5
  1061.  ble.s .noshad
  1062.  move.w #$1900,d7
  1063.  swap d2
  1064.  move.w d2,d1
  1065.  asl.w #8,d1
  1066.  swap d3
  1067.  move.b d3,d1
  1068.  swap d2
  1069. ; and.w #$3f3f,d1
  1070.  swap d3
  1071.  add.l a1,d2
  1072.  add.l a4,d3
  1073.  
  1074.  move.b (a0,d1.w*4),d7
  1075.  beq.s .noplottt
  1076.  
  1077.  move.b TEXTUREPAL(pc,d7.w),(a2)+
  1078.  dbra d0,.across
  1079.  bra.s .PASTAC 
  1080.  
  1081. .noshad:
  1082. ; swap d5
  1083. ; add.l a6,d5
  1084.  move.w a6,d7
  1085.  swap d2
  1086.  move.w d2,d1
  1087.  asl.w #8,d1
  1088.  swap d3
  1089.  move.b d3,d1
  1090.  swap d2
  1091.  and.w #$3f3f,d1
  1092.  swap d3
  1093.  add.l a1,d2
  1094.  add.l a4,d3
  1095.  
  1096.  move.b (a0,d1.w*4),d7
  1097.  beq.s .noplottt
  1098.  
  1099.  move.b TEXTUREPAL(pc,d7.w),(a2)+
  1100.  dbra d0,.across
  1101.  
  1102.  bra.s .PASTAC
  1103.  
  1104. .noplottt:
  1105.  addq #1,a2
  1106.  dbra d0,.across
  1107.  
  1108. .PASTAC
  1109.  
  1110.  move.l SAVESTACK,a7
  1111.  
  1112.  move.l (a7)+,d1
  1113.  move.l (a7)+,a0
  1114.  move.l (a7)+,a2
  1115.  
  1116. .noline:
  1117.  add.w #320,a2
  1118.  
  1119.  swap d1
  1120.  dbra d1,DOAHORLINE
  1121.  
  1122.  
  1123.  bra NOPOLYGON
  1124.  
  1125. TEXTUREPAL: incbin "ab3:includes/newtexturemaps.pal"
  1126.  
  1127. SAVESTACK: dc.l 0
  1128. HIGHPOLY: dc.w 0
  1129. LEN1: dc.w 0
  1130. BRIGHTNESS: dc.l 0
  1131. TRANSTEXT: dc.w 0
  1132. AANG: dc.w 0
  1133. BANG: dc.w 0
  1134. CANG: dc.w 0
  1135. DANG: dc.w 0
  1136.  
  1137. NOPOLYGON:
  1138.  
  1139. ***********************************************
  1140.  move.l (a7)+,a0
  1141.  move.l (a7)+,d7
  1142.  
  1143.  sub.w #1,HIGHPOLY
  1144.  
  1145.  dbra d7,POLYGONLOOP
  1146.  
  1147.  btst #6,$bfe001
  1148.  beq.s .SHOWSHADOW
  1149.  
  1150.  move.l FASTBUFFER,a0
  1151.  add.l #40*320+64,a0
  1152.  move.l #RAWSCRN+40*40+8,a1
  1153.  move.l #(24)-1,d0
  1154.  move.l #175,d1
  1155.  move.w #128,d2
  1156.  move.w #16,d3
  1157.  moveq #0,d4
  1158.  moveq #0,d5
  1159.  jsr CHUNKYTOPLANAR 
  1160.  
  1161.  bra .SHOWNSCRN
  1162.  
  1163. .SHOWSHADOW
  1164.  
  1165.  move.l #SHADOWBUFFER,a0
  1166.  add.l #40*256,a0
  1167.  move.l #RAWSCRN+40*40,a1
  1168.  move.l #(256/8)-1,d0
  1169.  move.l #175,d1
  1170.  move.w #0,d2
  1171.  move.w #8,d3
  1172.  moveq #0,d4
  1173.  moveq #0,d5
  1174.  jsr CHUNKYTOPLANAR 
  1175.  
  1176. .SHOWNSCRN:
  1177.  
  1178.  move.l FASTBUFFER,a0
  1179.  add.l #40*320,a0
  1180.  
  1181.  move.w #((320*176)/64)-1,d0
  1182.  moveq #0,d1
  1183. clrchunk:
  1184.  move.l d1,(a0)+
  1185.  move.l d1,(a0)+
  1186.  move.l d1,(a0)+
  1187.  move.l d1,(a0)+
  1188.  move.l d1,(a0)+
  1189.  move.l d1,(a0)+
  1190.  move.l d1,(a0)+
  1191.  move.l d1,(a0)+
  1192.  move.l d1,(a0)+
  1193.  move.l d1,(a0)+
  1194.  move.l d1,(a0)+
  1195.  move.l d1,(a0)+
  1196.  move.l d1,(a0)+
  1197.  move.l d1,(a0)+
  1198.  move.l d1,(a0)+
  1199.  move.l d1,(a0)+
  1200.  dbra d0,clrchunk
  1201.  
  1202.  move.l #SHADOWBUFFER,a0
  1203.  move.l #-1,d1
  1204.  move.l #-1,d2
  1205.  move.w #15,d0
  1206. clrshad:
  1207.  move.w #15,d5
  1208. innner
  1209.  move.l d2,(a0)+
  1210.  move.l d2,(a0)+
  1211.  move.l d2,(a0)+
  1212.  move.l d2,(a0)+
  1213.  move.l d1,(a0)+
  1214.  move.l d1,(a0)+
  1215.  move.l d1,(a0)+
  1216.  move.l d1,(a0)+
  1217.  move.l d2,(a0)+
  1218.  move.l d2,(a0)+
  1219.  move.l d2,(a0)+
  1220.  move.l d2,(a0)+
  1221.  move.l d1,(a0)+
  1222.  move.l d1,(a0)+
  1223.  move.l d1,(a0)+
  1224.  move.l d1,(a0)+
  1225.  move.l d2,(a0)+
  1226.  move.l d2,(a0)+
  1227.  move.l d2,(a0)+
  1228.  move.l d2,(a0)+
  1229.  move.l d1,(a0)+
  1230.  move.l d1,(a0)+
  1231.  move.l d1,(a0)+
  1232.  move.l d1,(a0)+
  1233.  move.l d2,(a0)+
  1234.  move.l d2,(a0)+
  1235.  move.l d2,(a0)+
  1236.  move.l d2,(a0)+
  1237.  move.l d1,(a0)+
  1238.  move.l d1,(a0)+
  1239.  move.l d1,(a0)+
  1240.  move.l d1,(a0)+
  1241.  move.l d2,(a0)+
  1242.  move.l d2,(a0)+
  1243.  move.l d2,(a0)+
  1244.  move.l d2,(a0)+
  1245.  move.l d1,(a0)+
  1246.  move.l d1,(a0)+
  1247.  move.l d1,(a0)+
  1248.  move.l d1,(a0)+
  1249.  move.l d2,(a0)+
  1250.  move.l d2,(a0)+
  1251.  move.l d2,(a0)+
  1252.  move.l d2,(a0)+
  1253.  move.l d1,(a0)+
  1254.  move.l d1,(a0)+
  1255.  move.l d1,(a0)+
  1256.  move.l d1,(a0)+
  1257.  move.l d2,(a0)+
  1258.  move.l d2,(a0)+
  1259.  move.l d2,(a0)+
  1260.  move.l d2,(a0)+
  1261.  move.l d1,(a0)+
  1262.  move.l d1,(a0)+
  1263.  move.l d1,(a0)+
  1264.  move.l d1,(a0)+
  1265.  move.l d2,(a0)+
  1266.  move.l d2,(a0)+
  1267.  move.l d2,(a0)+
  1268.  move.l d2,(a0)+
  1269.  move.l d1,(a0)+
  1270.  move.l d1,(a0)+
  1271.  move.l d1,(a0)+
  1272.  move.l d1,(a0)+
  1273.  dbra d5,innner
  1274.  exg d1,d2
  1275.  
  1276.  dbra d0,clrshad
  1277.  
  1278.  
  1279.  
  1280.     btst #7,$bfe001
  1281.     beq.s exit_closescr
  1282.  
  1283.  
  1284.     add.l #$8000,lmxoff
  1285.     cmp.l #40*65536,lmxoff
  1286.     blt.s .oksm
  1287.     sub.l #40*65536,lmxoff    
  1288. .oksm
  1289.  
  1290.     bra loop
  1291.     
  1292. lmxoff: dc.l 0
  1293.  
  1294. exit_closescr
  1295.     move.l    MyScreen(pc),a0
  1296.     CALLINT CloseScreen
  1297.  
  1298. exit_closeall
  1299.     move.l    _GfxBase(pc),a1
  1300.     CALLEXEC CloseLibrary
  1301.  
  1302. exit_closeint
  1303.     move.l    _IntuitionBase(pc),a1
  1304.     CALLEXEC CloseLibrary
  1305.  
  1306. exit_false
  1307.     move.l    #0,d0                return code
  1308.     rts
  1309.  
  1310. *********************************************
  1311.  
  1312. CALCSQROOT:
  1313.  tst.l d2
  1314.  beq .oksqr
  1315.  
  1316.  movem.l d0/d1/d3-d7/a0-a6,-(a7)
  1317.  
  1318.  move.w #31,d0
  1319. .findhigh
  1320.  btst d0,d2
  1321.  bne .foundhigh
  1322.  dbra d0,.findhigh
  1323. .foundhigh
  1324.  asr.w #1,d0
  1325.  clr.l d3
  1326.  bset d0,d3
  1327.  move.l d3,d0
  1328.  
  1329.  move.w d0,d1
  1330.  muls d1,d1    ; x*x
  1331.  sub.l d2,d1    ; x*x-a
  1332.  asr.l #1,d1    ; (x*x-a)/2
  1333.  divs d0,d1    ; (x*x-a)/2x
  1334.  sub.w d1,d0    ; second approx
  1335.  bgt .stillnot0
  1336.  move.w #1,d0
  1337. .stillnot0
  1338.  
  1339.  move.w d0,d1
  1340.  muls d1,d1
  1341.  sub.l d2,d1
  1342.  asr.l #1,d1
  1343.  divs d0,d1
  1344.  sub.w d1,d0    ; second approx
  1345.  bgt .stillnot02
  1346.  move.w #1,d0
  1347. .stillnot02
  1348.  
  1349.  move.w d0,d1
  1350.  muls d1,d1
  1351.  sub.l d2,d1
  1352.  asr.l #1,d1
  1353.  divs d0,d1
  1354.  sub.w d1,d0    ; second approx
  1355.  bgt .stillnot03
  1356.  move.w #1,d0
  1357. .stillnot03
  1358.  
  1359.  move.w d0,d2
  1360.  ext.l d2
  1361.  
  1362.  movem.l (a7)+,d0/d1/d3-d7/a0-a6
  1363.  
  1364. .oksqr
  1365.  rts
  1366.  
  1367.  
  1368. **********************************************
  1369. **********************************************
  1370. **********************************************
  1371. **********************************************
  1372. **********************************************
  1373. **********************************************
  1374. **********************************************
  1375. **********************************************
  1376. **********************************************
  1377. **********************************************
  1378. **********************************************
  1379. **********************************************
  1380. **********************************************
  1381. **********************************************
  1382. **********************************************
  1383. **********************************************
  1384. **********************************************
  1385. **********************************************
  1386. **********************************************
  1387.     
  1388. SIMPLECALCLINE:
  1389.  move.l #ONSCREENPTS,a1
  1390.  move.w 2(a1,d0.w*4),d2        ;fy
  1391.  move.w 2(a1,d1.w*4),d7        ;sy
  1392.  
  1393.  move.l #RIGHTUVS,a3
  1394.  asr.w #2,d2
  1395.  asr.w #2,d7
  1396.  cmp.w d2,d7 
  1397.  beq .noline
  1398.  
  1399.  bgt.s .lineonright
  1400. .lineonleft:
  1401.  move.l #LEFTUVS,a3
  1402.  exg d0,d1
  1403.  exg d2,d7
  1404.  
  1405. .lineonright:
  1406.  
  1407.  sub.w d2,d7
  1408.  asl.w #4,d2
  1409.  add.w d2,a3
  1410.  
  1411.  move.w d7,YDIFF
  1412.  
  1413.  move.w (a1,d0.w*4),d3        ;fx
  1414.  move.w (a1,d1.w*4),d7        ;sx
  1415.  
  1416.  sub.w d3,d7
  1417.  swap d3
  1418.  swap d7
  1419.  clr.w d3
  1420.  clr.w d7
  1421.  divs.l YDIFF-2,d7
  1422.  move.l d7,a0    ; dx
  1423.  
  1424.  move.l #UVCOORDS,a2
  1425.  move.l #ROTATEDPTS,a1
  1426.  
  1427.  move.w (a2,d0.w*4),d4
  1428.  move.w 2(a2,d0.w*4),d5
  1429.  move.w (a2,d1.w*4),d6
  1430.  move.w 2(a2,d1.w*4),d7
  1431.  
  1432.  sub.w d4,d6
  1433.  sub.w d5,d7
  1434.  swap d4
  1435.  swap d5
  1436.  clr.w d4
  1437.  clr.w d5
  1438.  swap d6
  1439.  swap d7
  1440.  clr.w d6
  1441.  clr.w d7
  1442.  
  1443.  divs.l YDIFF-2,d6
  1444.  divs.l YDIFF-2,d7
  1445.  
  1446.  move.l d6,a4
  1447.  move.l d7,a5
  1448.  
  1449.  asl.w #4,d0
  1450.  asl.w #4,d1
  1451.  move.l (a1,d0.w),d6
  1452.  
  1453.  move.l (a1,d1.w),d7
  1454.  asl.l #5,d6
  1455.  asl.l #5,d7
  1456.  sub.l d6,d7
  1457.  divs.l YDIFF-2,d7
  1458.  move.l d7,a2
  1459.  move.l d6,a6
  1460.  
  1461.  move.l 4(a1,d0.w),d6
  1462.  move.l 4(a1,d1.w),d7
  1463.  asl.l #5,d6
  1464.  asl.l #5,d7
  1465.  sub.l d6,d7
  1466.  divs.l YDIFF-2,d7
  1467.  exg d7,a6
  1468.  exg d7,d6
  1469.  
  1470.  move.l 8(a1,d0.w),d0
  1471.  move.l 8(a1,d1.w),d1
  1472.  swap d0
  1473.  swap d1
  1474.  clr.w d0
  1475.  clr.w d1
  1476.  asr.l #2,d0
  1477.  asr.l #2,d1
  1478.  sub.l d0,d1
  1479.  divs.l YDIFF-2,d1
  1480.  move.l d1,a1
  1481.  move.l YDIFF-2,d1
  1482.  subq #1,d1
  1483.  
  1484. ; d3=sx a0=dsx
  1485. ; d4=u a4=du
  1486. ; d5=v a5=dv
  1487. ; d6=x a2=dx
  1488. ; d7=y a6=dy
  1489. ; d0=z a1=dz
  1490. ; d1=dsy
  1491.  
  1492.  
  1493.  add.l #128*65536,d6
  1494.  add.l #128*65536,d7
  1495.  add.l #128*65536,d0
  1496.  
  1497. .PUTINLINE:
  1498.  swap d3
  1499.  move.w d3,(a3)+
  1500.  swap d3
  1501.  add.l a0,d3
  1502.  move.l d4,(a3)+
  1503.  add.l a4,d4
  1504.  move.l d5,(a3)+
  1505.  swap d6
  1506.  add.l a5,d5
  1507.  move.w d6,(a3)+
  1508.  swap d6
  1509.  swap d7
  1510.  add.l a2,d6
  1511.  move.w d7,(a3)+
  1512.  swap d7
  1513.  swap d0
  1514.  add.l a6,d7
  1515.  move.w d0,(a3)+
  1516.  swap d0
  1517.  add.l a1,d0
  1518.  dbra d1,.PUTINLINE
  1519.  
  1520. .noline:
  1521.  rts
  1522.  
  1523. TOPLINE: dc.w 0
  1524. BOTLINE: dc.w 0
  1525.  
  1526.  
  1527.  
  1528. **********************************************
  1529. **********************************************
  1530. **********************************************
  1531. **********************************************
  1532. **********************************************
  1533. **********************************************
  1534. **********************************************
  1535. **********************************************
  1536. **********************************************
  1537. **********************************************
  1538. **********************************************
  1539. **********************************************
  1540. **********************************************
  1541. **********************************************
  1542. **********************************************
  1543. **********************************************
  1544. **********************************************
  1545. **********************************************
  1546. **********************************************
  1547.     
  1548. SIMPLESHADLINE:
  1549.  move.l #ROTATEDPTS,a1
  1550.  asl.l #2,d0
  1551.  asl.l #2,d1
  1552.  move.l 8(a1,d0.w*4),d2        ;fz
  1553.  move.l 8(a1,d1.w*4),d7        ;sz
  1554.  
  1555.  move.l #LEFTUVS,a3
  1556.  asr.l #2,d2
  1557.  asr.l #2,d7
  1558.  cmp.l d2,d7 
  1559.  beq .noline
  1560.  
  1561.  bgt.s .lineonright
  1562. .lineonleft:
  1563.  move.l #RIGHTUVS,a3
  1564.  exg d0,d1
  1565.  exg d2,d7
  1566.  
  1567. .lineonright:
  1568.  
  1569.  sub.w d2,d7
  1570.  add.w #128,d2
  1571.  lea (a3,d2.w*8),a3
  1572.  
  1573.  move.w d7,YDIFF
  1574.  
  1575.  move.l (a1,d0.w*4),d3        ;fx
  1576.  move.l (a1,d1.w*4),d7        ;sx
  1577.  
  1578.  asl.l #5,d3
  1579.  asl.l #5,d7
  1580.  
  1581.  sub.l d3,d7
  1582.  divs.l YDIFF-2,d7
  1583.  move.l d7,a0    ; dx
  1584.  
  1585.  move.l #UVCOORDS,a2
  1586.  move.l #ROTATEDPTS,a1
  1587.  
  1588.  move.w (a2,d0.w),d4
  1589.  move.w 2(a2,d0.w),d5
  1590.  move.w (a2,d1.w),d6
  1591.  move.w 2(a2,d1.w),d7
  1592.  
  1593.  sub.w d4,d6
  1594.  sub.w d5,d7
  1595.  swap d4
  1596.  swap d5
  1597.  clr.w d4
  1598.  clr.w d5
  1599.  swap d6
  1600.  swap d7
  1601.  clr.w d6
  1602.  clr.w d7
  1603.  
  1604.  divs.l YDIFF-2,d6
  1605.  divs.l YDIFF-2,d7
  1606.  
  1607.  move.l d6,a4
  1608.  move.l d7,a5
  1609.  
  1610. ; asl.w #4,d0
  1611. ; asl.w #4,d1
  1612.  
  1613.  move.l 4(a1,d0.w*4),d6
  1614.  move.l 4(a1,d1.w*4),d7
  1615.  asl.l #5,d6
  1616.  asl.l #5,d7
  1617.  sub.l d6,d7
  1618.  divs.l YDIFF-2,d7
  1619.  exg d7,a6
  1620.  exg d7,d6
  1621.  
  1622.  move.l YDIFF-2,d1
  1623.  subq #1,d1
  1624.  
  1625. ; d3=x a0=dx
  1626. ; d4=u a4=du
  1627. ; d5=v a5=dv
  1628. ; d7=y a6=dy
  1629. ; d1=dz
  1630.  
  1631.  move.w HIGHPOLY,d7
  1632.  
  1633.  add.l #128*65536,d3
  1634. ; add.l #128*65536,d7
  1635.  
  1636. .PUTINLINE:
  1637.  swap d3
  1638.  move.w d3,(a3)+
  1639.  swap d3
  1640.  add.l a0,d3
  1641.  swap d4
  1642.  move.w d4,(a3)+
  1643.  swap d4
  1644.  swap d5
  1645.  add.l a4,d4
  1646.  move.w d5,(a3)+
  1647.  swap d5
  1648.  add.l a5,d5
  1649. ; swap d7
  1650.  move.w d7,(a3)+
  1651. ; swap d7
  1652. ; add.l a6,d7
  1653.  dbra d1,.PUTINLINE
  1654.  
  1655. .noline:
  1656.  rts
  1657.  
  1658.     
  1659.  dc.w 0
  1660. YDIFF: dc.w 0
  1661.  
  1662. SPINAROUND: dc.w 0    
  1663. XCOS: dc.w 0
  1664. YCOS: dc.w 0
  1665. XSIN: dc.w 0
  1666. YSIN: dc.w 0
  1667. XCOS3: dc.w 0
  1668. YCOS3: dc.w 0
  1669. XSIN3: dc.w 0
  1670. YSIN3: dc.w 0
  1671. XCOS2: dc.w 0
  1672. YCOS2: dc.w 0
  1673. XSIN2: dc.w 0
  1674. YSIN2: dc.w 0
  1675. XADD: dc.l 0
  1676. YADD: dc.l 0
  1677. ZADD: dc.l 0
  1678. XOFF: dc.w 0
  1679. YOFF: dc.w 0
  1680. OLDXM: dc.w 0
  1681. OLDYM: dc.w 0
  1682.  
  1683.  
  1684.  
  1685. TEXTUREADD: dc.w 0
  1686.  
  1687. CALCLINE:
  1688.  
  1689.  moveq #0,d2
  1690.  moveq #0,d3
  1691.  moveq #0,d4
  1692.  moveq #0,d5
  1693.  move.l #UVCOORDS,a0
  1694.  move.w (a0,d0.w*4),d2
  1695.  swap d2
  1696.  move.w 2(a0,d0.w*4),d3
  1697.  swap d3
  1698.  move.w (a0,d1.w*4),d4
  1699.  swap d4
  1700.  move.w 2(a0,d1.w*4),d5
  1701.  swap d5
  1702.  
  1703.  move.l #ONSCREENPTS,a1
  1704.  move.w 2(a1,d0.w*4),d6    ; ly
  1705.  move.w 2(a1,d1.w*4),d7    ; ry
  1706.  
  1707.  asr.w #2,d6
  1708.  move.l #LEFTRIGHT+2,a2
  1709.  move.l #RIGHTUVS,a3
  1710.  asr.w #2,d7
  1711.  cmp.w d6,d7
  1712.  beq .noline
  1713.  bgt.s .lineonright
  1714. .lineonleft:
  1715.  move.l #LEFTUVS,a3
  1716.  subq #2,a2
  1717.  exg d6,d7
  1718.  exg d0,d1
  1719.  exg d2,d4
  1720.  exg d3,d5 
  1721.  
  1722. ***********
  1723. * THROW AWAY ABOVE FOR NOW.
  1724. ***********
  1725. .lineonright:
  1726.  sub.w d6,d7
  1727.  lea (a2,d6.w*4),a2
  1728.  
  1729.  movem.l d0-d7/a0-a6,-(a7)
  1730.  move.l #SUBSTACK,a0
  1731.  asl.w #2,d0
  1732.  asl.w #2,d1
  1733.  move.l #ROTATEDPTS,a1
  1734.  move.l a0,a2
  1735.  move.l 4(a1,d0.w*4),(a2)+    ;ty
  1736.  move.l 8(a1,d0.w*4),(a2)+    ;tz
  1737.  move.l 4(a1,d1.w*4),(a2)+    ;by
  1738.  move.l 8(a1,d1.w*4),(a2)+    ;bz
  1739.  move.l d2,(a2)+        ;tu
  1740.  move.l d3,(a2)+        ;tv
  1741.  move.l d4,(a2)+        ;bu
  1742.  move.l d5,(a2)+        ;bv
  1743.  move.l (a1,d0.w*4),(a2)+    ;tx
  1744.  move.l (a1,d1.w*4),(a2)+    ;bx
  1745.  move.l #0,a5
  1746.  bsr SUBDIVIDE
  1747.  move.l a5,MAXSUB
  1748.  
  1749.  movem.l (a7)+,d0-d7/a0-a6
  1750.  
  1751.  move.w (a1,d0.w*4),d2
  1752.  move.w 2(a1,d0.w*4),d3
  1753.  move.w (a1,d1.w*4),d4
  1754.  move.w 2(a1,d1.w*4),d5
  1755.  
  1756.  sub.w d2,d4    ;dx
  1757.  sub.w d3,d5    ;dy
  1758.          ;d7=ddy
  1759.  
  1760.  subq #1,d7
  1761.  swap d4
  1762.  clr.w d4
  1763.  swap d2
  1764.  clr.w d2
  1765.  asl.l #2,d4
  1766.  ext.l d5
  1767.  divs.l d5,d4    ;dx/dy
  1768. .putinleftline
  1769.  swap d2
  1770.  move.w d2,(a2)
  1771.  addq #4,a2
  1772.  swap d2
  1773.  add.l d4,d2
  1774.  dbra d7,.putinleftline
  1775.  
  1776. .noline:
  1777.  rts
  1778.  
  1779. MAXSUB: dc.l 0
  1780.  
  1781. SUBDIVIDE:
  1782.  add.l #1,a5
  1783.  move.l (a0),d0
  1784.  move.l d0,d4
  1785.  move.l 4(a0),d1
  1786.  divs d1,d0
  1787.  move.l 8(a0),d2
  1788.  add.l d2,d4
  1789.  and.b #%11111100,d0
  1790.  move.l d2,40+8(a0)
  1791.  add.w #128*4,d0
  1792.  move.l 12(a0),d3
  1793.  asr.l #1,d4    ; middle y
  1794.  move.l d3,40+12(a0)
  1795.  divs d3,d2
  1796.  
  1797.  and.b #%11111100,d2
  1798.  add.w #128*4,d2
  1799.  
  1800.  move.l d1,12(a3,d0.w*4)
  1801.  move.l d3,12(a3,d2.w*4)
  1802.  add.l d1,d3
  1803.  asr.l #1,d3
  1804.  
  1805.  move.l 16(a0),d5
  1806.  move.l d5,(a3,d0.w*4)
  1807.  move.l 24(a0),d6
  1808.  move.l d6,24+40(a0)
  1809.  add.l d6,d5
  1810.  asr.l #1,d5
  1811.  move.l d5,(a3,d2.w*4)
  1812.  
  1813.  move.l 20(a0),d6
  1814.  move.l d6,4(a3,d0.w*4)
  1815.  move.l 28(a0),d7
  1816.  move.l d7,28+40(a0)
  1817.  add.l d7,d6
  1818.  asr.l #1,d6
  1819.  move.l d7,4(a3,d2.w*4)
  1820.  
  1821.  move.l 32(a0),d7
  1822.  move.l d7,8(a3,d0.w*4)
  1823.  move.l 36(a0),d1
  1824.  move.l d1,36+40(a0)
  1825.  add.l d1,d7
  1826.  asr.l #1,d7
  1827.  move.l d1,8(a3,d2.w*4)
  1828.  
  1829.  sub.w d0,d2
  1830.  sub.w #4,d2
  1831.  ble.s .nomore
  1832.  
  1833.  move.l d4,40(a0)  ;my
  1834.  move.l d4,8(a0)
  1835.  
  1836.  move.l d3,40+4(a0)    ;mz
  1837.  move.l d3,12(a0)
  1838.  move.l d5,40+16(a0)
  1839.  move.l d5,16+8(a0)
  1840.  move.l d6,40+20(a0)
  1841.  move.l d6,20+8(a0)
  1842.  move.l d7,40+32(a0)
  1843.  move.l d7,36(a0)
  1844.  
  1845.  add.l #40,a0
  1846.  bsr SUBDIVIDE
  1847.  sub.l #1,a5
  1848.  sub.l #40,a0
  1849.  bsr SUBDIVIDE
  1850. .nomore
  1851.  rts
  1852.  
  1853. **********************************************************
  1854.  
  1855. UVCOORDS: ds.l 4
  1856. ROTATEDPTS: ds.l 4*4
  1857. ONSCREENPTS: ds.l 4
  1858.  
  1859. ZOFF: dc.w 1024
  1860.  
  1861. LEFTRIGHT: ds.l 256
  1862.  
  1863. POLYGONDATA:
  1864.  
  1865.  dc.w 27
  1866.  
  1867.  dc.w $8000+1*256+0
  1868.  dc.w 0,0
  1869.  dc.w -200,150,200,0,0
  1870.  dc.w 0,200,200,63,0
  1871.  dc.w 0,250,0,63,63
  1872.  dc.w -200,200,0,0,63
  1873.  
  1874.  dc.w $8000+0*256+3
  1875.  dc.w 0,0
  1876.  dc.w 0,200,200,0,0
  1877.  dc.w 200,150,200,63,0
  1878.  dc.w 200,200,0,63,63
  1879.  dc.w 0,250,0,0,63
  1880.  
  1881.  dc.w $8000+0*256+3
  1882.  dc.w 0,0
  1883.  dc.w -200,200,0,0,0
  1884.  dc.w 0,250,0,63,0
  1885.  dc.w 0,200,-200,63,63
  1886.  dc.w -200,150,-200,0,63
  1887.  
  1888.  dc.w $8000+1*256+0
  1889.  dc.w 0,0
  1890.  dc.w 0,250,0,0,0
  1891.  dc.w 200,200,0,63,0
  1892.  dc.w 200,150,-200,63,63
  1893.  dc.w 0,200,-200,0,63
  1894.  
  1895. cr EQU 120
  1896.  
  1897. ****************************
  1898.  
  1899.  
  1900.  dc.w 3*256+3
  1901.  dc.w 2,0
  1902.  dc.w -cr,cr,cr,0,0
  1903.  dc.w cr,cr,cr,63,0
  1904.  dc.w cr,cr,-cr,63,63
  1905.  dc.w -cr,cr,-cr,0,63
  1906.  
  1907. ; dc.w $8000+0*256+2
  1908. ; dc.w 2,0
  1909. ; dc.w cr,-cr,cr,0,0
  1910. ; dc.w -cr,-cr,cr,63,0
  1911. ; dc.w -cr,-cr,-cr,63,63
  1912. ; dc.w cr,-cr,-cr,0,63
  1913.  
  1914.  dc.w $8000+0*256+2
  1915.  dc.w 2,0
  1916.  dc.w cr,cr,cr,16,16
  1917.  dc.w cr,-cr,cr,48,16
  1918.  dc.w cr,-cr,-cr,48,48
  1919.  dc.w cr,cr,-cr,16,48
  1920.  
  1921.  dc.w $8000+0*256+2
  1922.  dc.w 2,0
  1923.  dc.w -cr,-cr,cr,16,16
  1924.  dc.w -cr,cr,cr,48,16
  1925.  dc.w -cr,cr,-cr,48,48
  1926.  dc.w -cr,-cr,-cr,16,48
  1927.  
  1928.  dc.w $8000+0*256+2
  1929.  dc.w 2,0
  1930.  dc.w -cr,-cr,cr,16,16
  1931.  dc.w cr,-cr,cr,48,16
  1932.  dc.w cr,cr,cr,48,48
  1933.  dc.w -cr,cr,cr,16,48
  1934.  
  1935.  dc.w $8000+0*256+2
  1936.  dc.w 2,0
  1937.  dc.w cr,-cr,-cr,16,16
  1938.  dc.w -cr,-cr,-cr,48,16
  1939.  dc.w -cr,cr,-cr,48,48
  1940.  dc.w cr,cr,-cr,16,48
  1941.  
  1942. ****************************
  1943.  
  1944.  
  1945. th equ 40
  1946. ir equ 40
  1947. ot equ 80
  1948.  
  1949. *****************************
  1950.  
  1951. ; dc.w 3*256+2
  1952. ; dc.w 1,0
  1953. ; dc.w -ir,-ir,-th,0,0
  1954. ; dc.w ir,-ir,-th,63,0
  1955. ; dc.w ir,-ir,th,63,15
  1956. ; dc.w -ir,-ir,th,0,15
  1957.  
  1958.  dc.w 3*256+2
  1959.  dc.w 1,0
  1960.  dc.w ir,-ot,-th,0,0
  1961.  dc.w ir,ir,-th,63,0
  1962.  dc.w ir,ir,th,63,15
  1963.  dc.w ir,-ot,th,0,15
  1964.  
  1965.  
  1966.  dc.w 3*256+2
  1967.  dc.w 1,0
  1968.  dc.w ir,ir,-th,0,0
  1969.  dc.w -ir,ir,-th,63,0
  1970.  dc.w -ir,ir,th,63,15
  1971.  dc.w ir,ir,th,0,15
  1972.  
  1973.  
  1974.  dc.w 3*256+2
  1975.  dc.w 1,0
  1976.  dc.w -ir,ir,-th,0,0
  1977.  dc.w -ir,-ot,-th,63,0
  1978.  dc.w -ir,-ot,th,63,15
  1979.  dc.w -ir,ir,th,0,15
  1980.  
  1981.  
  1982. *****************************
  1983.  
  1984. *******************
  1985. ; dc.w 3*256+2
  1986. ; dc.w 1,0
  1987. ; dc.w -ot,-ot,-th,0,0
  1988. ; dc.w ot,-ot,-th,63,0
  1989. ; dc.w ir,-ir,-th,55,7
  1990. ; dc.w -ir,-ir,-th,7,7
  1991.  
  1992.  dc.w 3*256+2
  1993.  dc.w 1,0
  1994.  dc.w ot,-ot,-th,63,0
  1995.  dc.w ot,ot,-th,63,63
  1996.  dc.w ir,ir,-th,56,55
  1997.  dc.w ir,-ot,-th,56,0
  1998.  
  1999.  dc.w 3*256+2
  2000.  dc.w 1,0
  2001.  dc.w ot,ot,-th,63,63
  2002.  dc.w -ot,ot,-th,0,63
  2003.  dc.w -ir,ir,-th,8,55
  2004.  dc.w ir,ir,-th,55,55
  2005.  
  2006.  dc.w 3*256+2
  2007.  dc.w 1,0
  2008.  dc.w -ot,ot,-th,0,63
  2009.  dc.w -ot,-ot,-th,0,0
  2010.  dc.w -ir,-ot,-th,7,0
  2011.  dc.w -ir,ir,-th,7,55
  2012. **********************
  2013.  
  2014. *******************
  2015. ; dc.w 3*256+2
  2016. ; dc.w 1,0
  2017. ; dc.w ot,-ot,th,0,0
  2018. ; dc.w -ot,-ot,th,63,0
  2019. ; dc.w -ir,-ir,th,55,7
  2020. ; dc.w ir,-ir,th,7,7
  2021.  
  2022.  dc.w 3*256+2
  2023.  dc.w 1,0
  2024.  dc.w -ot,-ot,th,63,0
  2025.  dc.w -ot,ot,th,63,63
  2026.  dc.w -ir,ir,th,56,55
  2027.  dc.w -ir,-ot,th,56,0
  2028.  
  2029.  dc.w 3*256+2
  2030.  dc.w 1,0
  2031.  dc.w -ot,ot,th,63,63
  2032.  dc.w ot,ot,th,0,63
  2033.  dc.w ir,ir,th,8,55
  2034.  dc.w -ir,ir,th,55,55
  2035.  
  2036.  dc.w 3*256+2
  2037.  dc.w 1,0
  2038.  dc.w ot,ot,th,0,63
  2039.  dc.w ot,-ot,th,0,0
  2040.  dc.w ir,-ot,th,7,0
  2041.  dc.w ir,ir,th,7,55
  2042. **********************
  2043.  
  2044. *****************************
  2045.  
  2046.  dc.w 3*256+2
  2047.  dc.w 1,0
  2048.  dc.w -ot,ot,-th,0,0
  2049.  dc.w ot,ot,-th,63,0
  2050.  dc.w ot,ot,th,63,15
  2051.  dc.w -ot,ot,th,0,15
  2052.  
  2053.  dc.w 3*256+2
  2054.  dc.w 1,0
  2055.  dc.w -ot,-ot,-th,0,0
  2056.  dc.w -ot,ot,-th,63,0
  2057.  dc.w -ot,ot,th,63,15
  2058.  dc.w -ot,-ot,th,0,15
  2059.  
  2060.  dc.w 3*256+2
  2061.  dc.w 1,0
  2062.  dc.w ot,-ot,-th,0,0
  2063.  dc.w ir,-ot,-th,63,0
  2064.  dc.w ir,-ot,th,63,15
  2065.  dc.w ot,-ot,th,0,15
  2066.  
  2067.  dc.w 3*256+2
  2068.  dc.w 1,0
  2069.  dc.w -ir,-ot,-th,0,0
  2070.  dc.w -ot,-ot,-th,63,0
  2071.  dc.w -ot,-ot,th,63,15
  2072.  dc.w -ir,-ot,th,0,15
  2073.  
  2074.  dc.w 3*256+2
  2075.  dc.w 1,0
  2076.  dc.w ot,ot,-th,0,0
  2077.  dc.w ot,-ot,-th,63,0
  2078.  dc.w ot,-ot,th,63,15
  2079.  dc.w ot,ot,th,0,15
  2080.  
  2081.  
  2082. *****************************
  2083.  
  2084. ****************************
  2085.  
  2086.  
  2087. ; dc.w $8000+0*256+2
  2088. ; dc.w 2,0
  2089. ; dc.w -cr,-cr,cr,0,0
  2090. ; dc.w cr,-cr,cr,63,0
  2091. ; dc.w cr,-cr,-cr,63,63
  2092. ; dc.w -cr,-cr,-cr,0,63
  2093.  
  2094.  dc.w 3*256+3
  2095.  dc.w 2,0
  2096.  dc.w cr,cr,cr,0,0
  2097.  dc.w -cr,cr,cr,63,0
  2098.  dc.w -cr,cr,-cr,63,63
  2099.  dc.w cr,cr,-cr,0,63
  2100.  
  2101.  dc.w $8000+0*256+2
  2102.  dc.w 2,0
  2103.  dc.w -cr,cr,cr,16,16
  2104.  dc.w -cr,-cr,cr,48,16
  2105.  dc.w -cr,-cr,-cr,48,48
  2106.  dc.w -cr,cr,-cr,16,48
  2107.  
  2108.  dc.w $8000+0*256+2
  2109.  dc.w 2,0
  2110.  dc.w cr,-cr,cr,16,16
  2111.  dc.w cr,cr,cr,48,16
  2112.  dc.w cr,cr,-cr,48,48
  2113.  dc.w cr,-cr,-cr,16,48
  2114.  
  2115.  dc.w $8000+0*256+2
  2116.  dc.w 2,0
  2117.  dc.w -cr,-cr,-cr,16,16
  2118.  dc.w cr,-cr,-cr,48,16
  2119.  dc.w cr,cr,-cr,48,48
  2120.  dc.w -cr,cr,-cr,16,48
  2121.  
  2122.  dc.w $8000+0*256+2
  2123.  dc.w 2,0
  2124.  dc.w cr,-cr,cr,16,16
  2125.  dc.w -cr,-cr,cr,48,16
  2126.  dc.w -cr,cr,cr,48,48
  2127.  dc.w cr,cr,cr,16,48
  2128.  
  2129.  
  2130. ****************************
  2131.  
  2132.  
  2133. SINETABLE:
  2134.  incbin "ab3:includes/bigsine"
  2135.  
  2136.  
  2137. YANG: dc.w 0
  2138. XANG: dc.w 0
  2139.  
  2140. **********************************************************
  2141.  
  2142. * the definition of the screen - note that in assembler you
  2143. * MUST get the sizes of these fields correct, by consulting either
  2144. * the RKM or the header files
  2145.  
  2146.  
  2147. MyNewScreen    dc.w    0,0        left, top
  2148.         dc.w    320,256        width, height
  2149.         dc.w    8        depth
  2150.         dc.b    0,1        pens
  2151.         dc.w    0        viewmodes
  2152.         dc.w    CUSTOMSCREEN    type
  2153.         dc.l    MyFont        font
  2154.         dc.l    screen_title    title
  2155.         dc.l    0        gadgets
  2156.         dc.l    0        bitmap
  2157.  
  2158. * my font definition
  2159. MyFont    dc.l    font_name
  2160.     dc.w    TOPAZ_SIXTY
  2161.     dc.b    FS_NORMAL
  2162.     dc.b    FPF_ROMFONT
  2163.  
  2164. * the variables
  2165. _IntuitionBase    dc.l    0        Intuition lib pointer
  2166. _GfxBase    dc.l    0        graphics lib pointer
  2167. MyScreen        dc.l    0
  2168. MyWindow        dc.l    0
  2169. MyNewWindow    ds.b    nw_SIZE        a buffer
  2170.  
  2171.  
  2172. * some strings
  2173. int_name    INTNAME
  2174. graf_name    GRAFNAME
  2175. hello_message    dc.b    'Hello World'
  2176.  
  2177. * these are C strings, so have to be null terminated
  2178. screen_title    dc.b    'My Own Screen',0
  2179. font_name    dc.b    'topaz.font',0
  2180. window_title    dc.b    'A Simple Window',0
  2181.  
  2182.  even
  2183.  
  2184. xmouse: dc.w 0
  2185. ymouse: dc.w 0
  2186.  
  2187. spleen: dc.w 0
  2188. lastspleen: dc.w 0
  2189.  
  2190. COPIEDPAL:
  2191.  dc.w 256,0
  2192.  ds.l 3*256
  2193.  ds.l 10
  2194.  
  2195. SHADOWBUFFER: ds.l 65536/4
  2196.  
  2197. PALETTEBIT:
  2198. ; incbin "256palette"
  2199. ; dc.w $ffff,$fffe
  2200.  
  2201.  incbin "ab3:includes/256pal"
  2202.  
  2203.  include "ab3:source_4000/chunky.s"
  2204.  
  2205. willy: ds.w 48
  2206.  
  2207.  
  2208. PALS:
  2209.  ds.l 2*49
  2210.  
  2211.  
  2212. FRAME: dc.w 4
  2213. FLIBBLE: dc.w 0
  2214.  
  2215. FASTBUFFER:
  2216.  dc.l fasty
  2217.  
  2218. fasty: ds.b 320*256
  2219.  
  2220.  
  2221. SUBSTACK: ds.l 10*10*10
  2222.  
  2223. LEFTUVS: ds.w 8*256
  2224. RIGHTUVS: ds.w 8*256
  2225.  
  2226. WORLD: incbin "ab3:includes/world"
  2227.  
  2228. TWEEN: incbin "ab3:includes/tweenbrightfile"
  2229.  
  2230. TEXTURES: incbin "ab3:includes/newtexturemaps"
  2231.  
  2232.  SECTION BGDROP,code_c
  2233.  
  2234. RAWSCRN:
  2235.  ds.l 2560*8
  2236.